package br.com.sjdr.projeto.pessoa; 

import javax.swing.*;
import java.awt.*;
import br.com.sjdr.projeto.persistencia.PersistirCliente;

/**
 * Classe responsavel por criar, buscar, listar e excluir clientes. Esta classe e filha da 
 * classe <i>Pessoa</i>.
 * @author dante
 *
 */
public class Cliente extends Pessoa {
	
    private String Senha;
	private String CPF;

	public String getCPF() {
		return CPF;
	}

	public void setCPF(String CPF) {
		this.CPF = CPF;
	}
	
	public String getSenha() {
		return Senha;
	}

	public void setSenha(String Senha) {
		this.Senha = Senha;
	}

	/**
	 * Metodo responsavel por criar um novo cliente. e necessario informar um nome 
	 * que nao tenha sido cadastrado anteriormente, um endereco, telefone e um CPF valido.
	 * Caso o cliente ja exista, o usuario tem a opcao de escrever um outro nome
	 * @author dante
	 * @param campomsg 
	 * @param campoCpf 
	 * @param campotel 
	 * @param campoEnd 
	 */
	public static void novoCliente(JTextField campoNome, JTextField campoEnd, JTextField campotel, JTextField campoCpf, JTextField campomsg){ 
	
		Cliente cli = new Cliente();
		cli.setNome(campoNome.getText());
										
		if(verificaExistBool(cli.getNome())==true){ 
			campoNome.setForeground(Color.RED);
			campoNome.setText("CLIENTE JA CADASTRADO!");
			campomsg.setForeground(Color.RED);
			campomsg.setText("Falha ao efetuar cadastro!");					
		}
						
		else{  
							
			cli.setEndereco(campoEnd.getText());  
			cli.setTelefone(campotel.getText());
						
																							
			if(!verificaCPF(campoCpf.getText())){ 
				campoCpf.setForeground(Color.RED);
				campoCpf.setText("CPF INVÁLIDO,DIGITE OUTRO!");
				campomsg.setForeground(Color.RED);
				campomsg.setText("Falha ao efetuar cadastro!");						
			}
			else{
				cli.setCPF(campoCpf.getText());
				PersistirCliente.gravarobjeto(cli);
				campoNome.setText("");   
				campoEnd.setText("");
			    campotel.setText("");
				campoCpf.setText("");
				campomsg.setForeground(Color.BLUE);
				campomsg.setText("Cadastro efetuado com sucesso!");
			}
		}
	}
	
	/**
	 * cadastra novo cliente com senha, ou seja corresponde a acao cadastrar comprador
	 * @param campoNome
	 * @param campoCpf
	 * @param campomsg
	 */
	public static void novoClienteSenha(JTextField campoNome,JTextField campoCpf,JTextField camposenha, JTextField campomsg){ 
		
		Cliente cli = new Cliente();
		cli.setNome(campoNome.getText());
										
		if(verificaExistBool(cli.getNome())==true){ 
			campoNome.setForeground(Color.RED);
			campoNome.setText("CLIENTE JA CADASTRADO!");
			campomsg.setForeground(Color.RED);
			campomsg.setText("Falha ao efetuar cadastro!");					
		}
						
		else{  
							
			cli.setSenha(camposenha.getText());  
																										
			if(!verificaCPF(campoCpf.getText())){ 
				campoCpf.setForeground(Color.RED);
				campoCpf.setText("CPF INVÁLIDO,DIGITE OUTRO!");
				campomsg.setForeground(Color.RED);
				campomsg.setText("Falha ao efetuar cadastro!");						
			}
			else{
				cli.setCPF(campoCpf.getText());
				PersistirCliente.gravarobjeto(cli);
				campoNome.setText("");   
				campoCpf.setText("");
				camposenha.setText("");
				campomsg.setForeground(Color.BLUE);
				campomsg.setText("Cadastro efetuado com sucesso!");
			}
		}
	}
	
	/**
	 * Metodo que verifica se um CPF e valido. Se o valor dado ao CPF nao for um 
	 * tipo Long ele retorna um erro.
	 * @author dante
	 * @param CPF
	 * @return
	 */
	public static boolean verificaCPF(String CPF) { 
		try {
			Long.parseLong(CPF);
			
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	/**
	 * Metodo que verifica a existancia de um cliente retornando a sua posicao do 
	 * vetor <i>clientelist</i> caso exista. Se nao encontrar, retornar um valor negativo.
	 * @author dante
	 * @param nome
	 * @return
	 */
	public static int verificaExistInt(String nome) { 
		int var = -1;
		for (int i = 0; i < PersistirCliente.clientelist.size(); i++) {
			if (PersistirCliente.clientelist.get(i).getNome()
					.equalsIgnoreCase(nome)) {
				var = i;
			}
		}
		return var;
	}

	/**
	 * Metodo responsavel por verificar a exist�ncia de um cliente no vetor <i>clientelist</i>
	 * retornando um valor booleano(verdadeiro ou falso). Caso n�o encontre, retorna um valor falso.
	 * @author dante
	 * @param nome
	 * @return
	 */
	public static boolean verificaExistBool(String nome) {
		boolean var = false;
		for (int i = 0; i < PersistirCliente.clientelist.size(); i++) {
			if (PersistirCliente.clientelist.get(i).getNome()
					.equalsIgnoreCase(nome)) {
				var = true;
			}
		}
		return var;
	}

	/**
	 * Metodo responsavel por buscar um cliente apartir do seu nome. Apos o usuario digitar
	 * o nome a ser localizado, E chamado o metodo <i>verificaExistBool(y)</i> retornando verdadeiro
	 * caso seja encontrado. Em seguida sao exibidos todos os dados do cliente: Nome, Endereco, Telefone e CPF.
	 * Ao final ele retorna um valor inteiro relacionado a posicao do cliente no vetor <i>clientelist</i>.
	 * @author dante
	 * @return
	 */
	public static int buscarCliente(JTextField campoNome, JTextArea resultado) { 
		
		
		Cliente cli = new Cliente();
		cli.setNome(campoNome.getText());
		
		
		int elemento = 0;
		if (verificaExistBool(cli.getNome()) == true) {
			elemento = verificaExistInt(cli.getNome());
			if(elemento > -1){
				
			resultado.append("\n Nome: "+PersistirCliente.clientelist.get(elemento).getNome());
			resultado.append("\n Endereco: " + PersistirCliente.clientelist.get(elemento).getEndereco());
			resultado.append("\n Telefone: " + PersistirCliente.clientelist.get(elemento).getTelefone());
			resultado.append("\n CPF: " + PersistirCliente.clientelist.get(elemento).getCPF());
			
			}else{
				resultado.append("Cliente nao encontrado!");
				}
		} else {
			resultado.append("Cliente nao esta cadastrado!");
			elemento = -1;
		}
		return elemento;
	}

	/**
	 * Metodo responsavel por buscar um cliente informado pelo usuario e exclui-lo do vetor <i>clientelist</i>
	 * Para a busca e utilicado o metodo <i>buscarCliente()</i> que retorna a posicao do vetor que devera
	 * ser eliminada.
	 * @author dante
	 */
	public static void excluirCliente(JTextField campoNome, JTextArea resultado) { 
		int x = 0;
		x = buscarCliente(campoNome, resultado);
		
		if (x >= 0){
			PersistirCliente.clientelist.remove(x);
			resultado.setText("");
			resultado.append("Exclusao efetuada com sucesso!");	
		}
		else{
			resultado.setText("");
			resultado.append("Nao foi possivel efetuar a exclusao!");	
			}
	}

	/**
	 * Metodo responsavel apenas por listar todos os dados presentes no vetor clientelist.
	 * A cada elemento encontrado, e exibido o nome, endereco, telefone e CPF de cada cliente.
	 * @author dante
	 */
	public static void listagemCliente(JTextArea resultado) { 
		
		if (PersistirCliente.clientelist.size() > 0) {
			for (int i = 0; i < PersistirCliente.clientelist.size(); i++) {
				
				resultado.append("\n\n Nome: " + PersistirCliente.clientelist.get(i).getNome());
				resultado.append("\n Endereco: " + PersistirCliente.clientelist.get(i).getEndereco());
				resultado.append("\n Telefone: " + PersistirCliente.clientelist.get(i).getTelefone());
				resultado.append("\n CPF: " + PersistirCliente.clientelist.get(i).getCPF());
				
			}
		}
		else {
			resultado.append("Nao ha clientes cadastrados!");
		}
	}
}